iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

前幾天,[Day25] 使用第三方庫--以Glog為例'、[Day 21] 使用第三方庫--以json為例 [Day 20] 使用第三方庫--以OpenCV為例,都是要自己手動下載專案中需要使用到的第三方函式庫。
當專案中的依賴項不多的時候還好,一旦專案規模越來越大,有一天需要移植到其他平台,裝依賴真的會裝到懷疑人生,因此今天要介紹CMake中一個可以幫我們自動安裝依賴的模組 FetchContent

語法

FetchContent

FetchContent_Declare(
  <name>
  GIT_REPOSITORY <url>
  [GIT_TAG <version>]
)

<name>:依賴名稱
<url>:github的網址
<version>:特定的Releases版本

FetchContent_MakeAvailable

FetchContent_MakeAvailable(<name>)
<name>:FetchContent_Declare裡面的專案名稱

範例

1. 找到Release版本

找到依賴的 Github 頁面,通常在右邊紅框內會有Releases版本,像今天的 glog 就是 0.6.0 版。

https://ithelp.ithome.com.tw/upload/images/20231018/20162026R41l08zHzu.png

2. 編輯 Main / CMakeLists.txt

cmake_minimum_required(VERSION 3.22)
# 根據自己的cmake版本來設定最小版本,要小於當前版本
project(cmake_totorial VERSION 1.0.0 LANGUAGES CXX)
# 設定專案名稱為cmake_totorial,版本為1.0.0,且此項目使用C++


include(FetchContent)
FetchContent_Declare(
    glog
    GIT_REPOSITORY https://github.com/google/glog.git
    GIT_TAG        v0.6.0
)
# 專案名稱為glog,
# 從 https://github.com/google/glog.git 上取得
# 版本為v0.6.0
FetchContent_MakeAvailable(glog)
# 讓glog專案內部的CMakeLists.txt內容生效,像是 add_subdirectory(), include() 和 file()

add_executable(main src/main.cpp)
# 將main.cpp編譯成可執行文件main
target_link_libraries(main PUBLIC glog::glog)
# 將在glog這個命名空間中的庫鍊結到執行檔main
                                 

3. 編譯並執行

$ cd build
$ cmake ..
$ make
$ ./main


上一篇
[Day 26] 製作第三方函式庫(四)
下一篇
[Day 28] 專案中的GBD介紹
系列文
建構屬於自己的C/C++專案 : 我的30天CMake學習之旅29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言